That is a bug in cfront 2.1. There is a magic variable, __builtin_va_alist. It has to be added to the end of the argument list of a varadic function, and it has to be referenced in va_start. This requires source modification to (a) print ',__builtin_va_alist' on the end of the argument list, (b) pretend that this arg was declared, and thus pass references to it, and (c) not mangle its name in the process.
Here's a tiny bit more detail:
1) when print2.c prints a varadic procedure, it should add __builtin_va_alist to the end. It need not declare it. Type of int to the Sun C compiler (the default) is fine.
2) #define va_start(ap,parmN) ap = (char *)&__builtin_va_alist
3) when find.c see this reference to __builtin_va_alist, it should construct a special cfront name node. When name::print sees that node it should print its name literally, without adding any mangling.
4) the same trick is needed, with the name va_alist, for Ultrix/MIPS and HPUX.
5) the net result, in generated C code, looks like: